﻿using System.Linq;
using System.Web;
using CodeSaude.Application.ViewModels;
using CodeSaude.Domain.Interfaces.Repository;
using CodeSaude.Infra.CrossCutting.IoC.Provider.Abstract;
using CodeSaude.Infrastructure.CrossCutting.Util;

namespace CodeSaude.Infrastructure.CrossCutting.IoC.Provider.Concrete
{
    public class CustomAutenticacaoProvider : IAutenticacaoProvider
    {
        private readonly IUsuarioRepository _usuarioRepository;

        public CustomAutenticacaoProvider(IUsuarioRepository usuarioRepository)
        {
            _usuarioRepository = usuarioRepository;
        }
        
        public bool autenticar(AutenticacaoViewModel autenticacaoModel, out string msgErro, string grupo)
        {
            msgErro = string.Empty;
            var usuario = _usuarioRepository.GetAll().FirstOrDefault(a => a.Login == autenticacaoModel.Login);

            if (usuario == null)
            {
                msgErro = "Email não encontrado.";
                return false;
            }
            if (usuario.Senha != CodeUtils.Encrypt(autenticacaoModel.Senha))
            {
                msgErro = "Senha Incorreta.";
                return true;
            }

            HttpContext.Current.Session["AUTENTICACAO"] = new AutenticacaoViewModel
            {
                UsuarioId = usuario.UsuarioId,
 //               Grupo = (usuario.GrupoUsuario == null) ? "Administrador" : usuario.GrupoUsuario.NomeGrupo,
                Login = usuario.Email,
                Senha = usuario.Senha,
                Nome = usuario.Nome,
            };

            HttpContext.Current.Session["NOMEUSER"] = (usuario != null) ? usuario.Nome : "Visitante";
            return true;
        }

        public void desautenticar()
        {
            HttpContext.Current.Session.Remove("AUTENTICACAO");        
        }

        public bool autenticado
        {
            get
            {
                return HttpContext.Current.Session["AUTENTICACAO"] != null
                && HttpContext.Current.Session["AUTENTICACAO"].GetType() == typeof(AutenticacaoViewModel);
            }
        }

        public AutenticacaoViewModel UsuarioAutenticado
        {
            get
            {
                if (autenticado)
                    return (AutenticacaoViewModel)HttpContext.Current.Session["AUTENTICACAO"];
                return null;
            }
        }
    }
}